<?php
// +----------------------------------------------------------------------
// | OneThink [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2013 http://www.onethink.cn All rights reserved.
// +----------------------------------------------------------------------
// | Author: 麦当苗儿 <zuojiazi@vip.qq.com> <http://www.zjzit.cn>
// +----------------------------------------------------------------------

namespace Admin\Controller;
use Api\Manage\SysNoticeManage;

/**
 * 前台用户
 * @author 麦当苗儿 <zuojiazi@vip.qq.com>
 */
class FrontUsersController extends AdminController {

    /**
     * 用户管理首页
     * @author 麦当苗儿 <zuojiazi@vip.qq.com>
     */
    public function index(){
        $nickname       =   I('nickname');
        $map['status']  =   array('egt',0);

        if ($nickname)
        {
            $query['$or'][]['nickname'] = new \MongoRegex("/".$nickname."/i");
            $query['$or'][]['username'] = new \MongoRegex("/".$nickname."/i");
            $map['_array'] = $query;
        }

        $total = service('Users')->where($map)->count();
        if( isset($REQUEST['r']) ){
            $listRows = (int)$REQUEST['r'];
        }else{
            $listRows = C('LIST_ROWS') > 0 ? C('LIST_ROWS') : 10;
        }
        $page = new \Think\Page($total, $listRows, $REQUEST);
        if($total>$listRows){
            $page->setConfig('theme','%FIRST% %UP_PAGE% %LINK_PAGE% %DOWN_PAGE% %END% %HEADER%');
        }
        $p =$page->show();
        $this->assign('_page', $p? $p: '');
        $this->assign('_total',$total);
        $limit = $page->firstRow.','.$page->listRows;
        $list = service('Users')->where($map)->order('id desc')->limit($limit)->select();
        int_to_string($list);
        $this->assign('_list', array_values($list));
        $this->meta_title = '用户信息';
        $this->display();
    }


    public function nickname($id = 0, $nickname = '')
    {
        if (IS_POST){

            if (!$id || !$nickname){
                return $this->error('参数缺少');
            }

            if (service('Users')->where(['nickname' => $nickname])->find()){
                return $this->error('昵称存在');
            }

            $res = service('Users')->where(['id' => (int)$id])->save(['nickname' => $nickname]);
            $res ? $this->success('修改成功') : $this->error('修改失败');

        }else{
            $user = event('User')->info($id);
            $this->assign($user);
            $this->display();
        }
    }

    public function profile($id)
    {
        $id = (int)$id;
        $profile = service('Users')->find($id);
        if ($profile['auth_icon'] > 0){
            $icon = event('IconPacks')->getIconById($profile['auth_icon']);
            if ($icon){
                $profile['auth_icon'] = $icon;
                
            }else{
                $profile['auth_icon'] = null;
            }
        }

        $icon_pack = event('IconPacks')->getIcons(3);
        foreach ($icon_pack as $key => &$value) {
            uri_format($value['pic']);
        }

        $this->assign('auth_icon_pack', $icon_pack);
        $this->assign($profile);
        $this->display();
    }

    /**
     * 修改昵称初始化
     * @author huajie <banhuajie@163.com>
     */
    public function updateNickname(){
        $nickname = M('Member')->getFieldByUid(UID, 'nickname');
        $this->assign('nickname', $nickname);
        $this->meta_title = '修改昵称';
        $this->display();
    }

    /**
     * 修改昵称提交
     * @author huajie <banhuajie@163.com>
     */
    public function submitNickname(){
        //获取参数
        $nickname = I('post.nickname');
        $password = I('post.password');
        empty($nickname) && $this->error('请输入昵称');
        empty($password) && $this->error('请输入密码');

        //密码验证
        $User   =   new UserApi();
        $uid    =   $User->login(UID, $password, 4);
        ($uid == -2) && $this->error('密码不正确');

        $Member =   D('Member');
        $data   =   $Member->create(array('nickname'=>$nickname));
        if(!$data){
            $this->error($Member->getError());
        }

        $res = $Member->where(array('uid'=>$uid))->save($data);

        if($res){
            $user               =   session('user_auth');
            $user['username']   =   $data['nickname'];
            session('user_auth', $user);
            session('user_auth_sign', data_auth_sign($user));
            $this->success('修改昵称成功！');
        }else{
            $this->error('修改昵称失败！');
        }
    }

    /**
     * 修改密码初始化
     * @author huajie <banhuajie@163.com>
     */
    public function updatePassword(){
        $this->meta_title = '修改密码';
        $this->display();
    }

    /**
     * 修改密码提交
     * @author huajie <banhuajie@163.com>
     */
    public function submitPassword(){
        //获取参数
        $password   =   I('post.old');
        empty($password) && $this->error('请输入原密码');
        $data['password'] = I('post.password');
        empty($data['password']) && $this->error('请输入新密码');
        $repassword = I('post.repassword');
        empty($repassword) && $this->error('请输入确认密码');

        if($data['password'] !== $repassword){
            $this->error('您输入的新密码与确认密码不一致');
        }

        $Api    =   new UserApi();
        $res    =   $Api->updateInfo(UID, $password, $data);
        if($res['status']){
            $this->success('修改密码成功！');
        }else{
            $this->error($res['info']);
        }
    }

    /**
     * 用户行为列表
     * @author huajie <banhuajie@163.com>
     */
    public function action(){
        //获取列表数据
        $Action =   M('Action')->where(array('status'=>array('gt',-1)));
        $list   =   $this->lists($Action);
        int_to_string($list);
        // 记录当前列表页的cookie
        Cookie('__forward__',$_SERVER['REQUEST_URI']);

        $this->assign('_list', $list);
        $this->meta_title = '用户行为';
        $this->display();
    }

    /**
     * 新增行为
     * @author huajie <banhuajie@163.com>
     */
    public function addAction(){
        $this->meta_title = '新增行为';
        $this->assign('data',null);
        $this->display('editaction');
    }

    /**
     * 编辑行为
     * @author huajie <banhuajie@163.com>
     */
    public function editAction(){
        $id = I('get.id');
        empty($id) && $this->error('参数不能为空！');
        $data = M('Action')->field(true)->find($id);

        $this->assign('data',$data);
        $this->meta_title = '编辑行为';
        $this->display();
    }

    /**
     * 更新行为
     * @author huajie <banhuajie@163.com>
     */
    public function saveAction(){
        $res = D('Action')->update();
        if(!$res){
            $this->error(D('Action')->getError());
        }else{
            $this->success($res['id']?'更新成功！':'新增成功！', Cookie('__forward__'));
        }
    }

    /**
     * 会员状态修改
     * @author 朱亚杰 <zhuyajie@topthink.net>
     */
    public function changeStatus($method=null){
        $id = array_unique((array)I('id',0));
        if( in_array(C('USER_ADMINISTRATOR'), $id)){
            $this->error("不允许对超级管理员执行该操作!");
        }
        $id = is_array($id) ? implode(',',$id) : $id;
        if ( empty($id) ) {
            $this->error('请选择要操作的数据!');
        }
        $map['uid'] =   array('in',$id);
        switch ( strtolower($method) ){
            case 'forbiduser':
                $this->forbid('Member', $map );
                break;
            case 'resumeuser':
                $this->resume('Member', $map );
                break;
            case 'deleteuser':
                $this->delete('Member', $map );
                break;
            default:
                $this->error('参数非法');
        }
    }

    public function add($username = '', $password = '', $repassword = '', $email = '', $nickname = ''){
        if(IS_POST){
            /* 检测密码 */
            if($password != $repassword){
                $this->error('密码和重复密码不一致！');
            }

            /* 调用注册接口注册用户 */
            $User   =   service('Users');
            $uid    =   $User->register($username, $password, '', $nickname, '');
            if(0 < $uid){ //注册成功
                $this->success('用户添加成功！',U('index'));
            } else { //注册失败，显示错误信息
                $this->error($this->showRegError($uid));
            }
        } else {
            $this->meta_title = '新增用户';
            $this->display();
        }
    }

    /**
     * 获取用户注册错误信息
     * @param  integer $code 错误编码
     * @return string        错误信息
     */
    private function showRegError($code = 0){
        switch ($code) {
            case -1:  $error = '用户名长度必须在16个字符以内！'; break;
            case -2:  $error = '用户名被禁止注册！'; break;
            case -3:  $error = '用户名被占用！'; break;
            case -4:  $error = '密码长度必须在6-30个字符之间！'; break;
            case -5:  $error = '邮箱格式不正确！'; break;
            case -6:  $error = '邮箱长度必须在1-32个字符之间！'; break;
            case -7:  $error = '邮箱被禁止注册！'; break;
            case -8:  $error = '邮箱被占用！'; break;
            case -9:  $error = '手机格式不正确！'; break;
            case -10: $error = '手机被禁止注册！'; break;
            case -11: $error = '手机号被占用！'; break;
            default:  $error = '未知错误';
        }
        return $error;
    }

    /**
    *用户权限绑定
    */
    public function bindGroup($id, $groups = ''){
        // $uid = I('get.id', 0, 'intval');
        // $map = array('uid'=>$uid, 'status'=>array('egt', 0),);
        // $user = M('member')->where($map)->field('type, nickname')->find();
        // if(!$user['type'])
        //     $this->error('用户不存在');

        // $map = array('status'=>array('egt',0),);
        // $field = 'id,title';
        // if($user['type']==1){
        //     $map['module'] = 'admin';
        //     $this->authGroup = M('auth_group')->where($map)->field($field)->select();
        // }elseif($user['type'] == 2){
        //     $map['module'] = 'home';
        //      $this->authGroup = M('auth_group')->where($map)->field($field)->select();
        // }

        // $this->ugrp = M('auth_group_access')->where(array('uid'=>$uid))->getField('group_id');

        // $this->nickName = $user['nickname'];
        // $this->uid = $uid;
        $id = (int)$id;
        $user = service('Users')->find($id);
        if(!$user['type']) $this->error('用户不存在');

        $Groups = [
            'video',
            'match'
        ];

        if (IS_POST){
            $save = [
                'id' => $id,
                'groups' => $groups
            ];
            $res = service('Users')->save($save);
            $res ? $this->success('修改成功') : $this->error('修改失败');
        }
        else{
            foreach ($Groups as $group) {
                $groups_options[] = [
                    'group' => $group,
                    'selected' => in_array($group, $user['groups']) ? 1 : 0
                ];
            }
            $this->assign($user);
            $this->assign('groups_options', $groups_options);
            $this->display('group');
        }

    }

    /**
    *用户权限解绑
    *@author susy<susy.liang@ilongyuan.com.cn>
    */
    public function rmGroup(){

        $uid = I('uid', 0, 'intval');
        $map = array('uid'=>$uid, 'status'=>array('egt', 0),);
        $user = M('member')->where($map)->field('type, nickname')->find();
        if(!$user)
            $this->error('用户不存在');

        $map = array('uid'=>$uid);
        $group = M('auth_group_access')->where($map)->select();
        if(!$group)
            $this->error('用户未设置用户组');

        $res = M('auth_group_access')->where($map)->delete();
        if($res)
            $this->success('用户组解绑成功');
        else
            $this->error('操作失败');

    }

    /**
    *物理删除用户
    *@author susy.liang<liangling@ilongyuan.com.cn>
    */
    public function physicsDel(){
        $uid = I('id', 0, 'intval');
        
        $user = service('Users')->find($uid);

        if ($user['status'] == -1){
            return $this->success('操作成功');
        }
        $save = [
            'id' => $uid,
            'username' => $user['username'].'_DEL_'.$uid,
            'mobile'   => '',
            'status'   => -1,
        ];
        !empty($user['nickname']) && $save['nickname'] = $user['nickname'].'_DEL_'.$uid;

        service('Users')->save($save);
        $sso = service('Sso')->where(['uid' => $uid])->find();
        if ($sso){
            service('Sso')->where(['uid' => $uid])->delete();
        }
        $this->success('操作成功');
    }










    /**
     * 给用户分配认证身份标识
     * @author  Legend.Xie 
     * 2016-03-15 14:40:40
     */
    public function auth_icon($uid, $id = 0)
    {
        $save = [
            'id' => (int)$uid,
            'auth_icon' => (int)$id
        ];
        service('Users')->save($save);
        if ($id > 0){
            SysNoticeManage::finishAuthicon($uid, $id);
        }
        $this->success('修改成功');
    }




}
